home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / controlloopcd32.s < prev    next >
Text File  |  1997-01-31  |  42KB  |  2,132 lines

  1. ; Main control loop.
  2. ; This is the very outer loop of the program.
  3.  
  4. ; What needs to be done and when?
  5.  
  6. ; Black screen start.
  7. ; Load title music
  8. ; Load title screen
  9. ; Fade up title screen
  10. ; Select options
  11. ; Play game.
  12.  
  13. ; Playing the game involves allocating screen and
  14. ; level memory, loading the level, loading the
  15. ; samples, loading the wall graphics, playing the
  16. ; level, deallocating the screen memory....
  17.  
  18. ; Control part should therefore:
  19.  
  20. ; 1. Load Title Music
  21. ; 2. Load title screen
  22. ; 3. Fade up title screen.
  23. ; 4. Add 'loading' message
  24. ; 5. Load samples and walls
  25. ; 6: LOOP START
  26. ; 7. Option select screens
  27. ; 8. Free music mem, allocate level mem.
  28. ; 9. Load level
  29. ;10. Play level with options selected
  30. ;11. Reload title music
  31. ;12. Reload title screen
  32. ;13. goto 6
  33.  
  34. INTROTUNEADDR: dc.l 0
  35. INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
  36.  even
  37. TITLESCRNADDR: dc.l 0
  38. TITLESCRNNAME: dc.b 'ab3:includes/titlescrnraw',0
  39.  even
  40. OPTSPRADDR: dc.l 0
  41.  
  42.  
  43. KVALTOASC:
  44.         Dc.b    " `  "," 1  "," 2  "," 3  "
  45.         dc.b    " 4  "," 5  "," 6  "," 7  "
  46.         dc.b    " 8  "," 9  "
  47.         Dc.b    " 0  "," -  "," +  "," \  "
  48.         dc.b     '    ','    '," Q  "," W  "
  49.         dc.b    " E  "," R  "
  50.         Dc.b    " T  "," Y  "," U  "," I  "
  51.         dc.b    " O  "," P  "," [  "," ]  "
  52.         dc.b    '    ','KP1 '
  53.         Dc.b    'KP2 ','KP3 '," A  "," S  "
  54.         dc.b    " D  "," F  "," G  "," H  "
  55.         dc.b    " J  "," K  "
  56.         Dc.b    " L  "," ;  "," #  ",'    '
  57.         dc.b    '    ','KP4 ','KP5 ','KP6 '
  58.         dc.b    '    '," Z  "
  59.         Dc.b    " X  "," C  "," V  "," B  "
  60.         dc.b    " N  "," M  "," ,  "," .  "
  61.         dc.b     " /  ",'    '
  62.         Dc.b    '    ','KP7 ','KP8 ','KP9 '
  63.         dc.b    'SPC ','<-- ','TAB ','ENT '
  64.         dc.b    'RTN ','ESC '
  65.         Dc.b    'DEL ','    ','    ','    '
  66.         dc.b    'KP- ','    ','UCK ','DCK '
  67.         dc.b    'RCK ','LCK '
  68.         Dc.b    'FK1 ','FK2 ','FK3 ','FK4 '
  69.         dc.b    'FK5 ','FK6 ','FK7 ','FK8 '
  70.         dc.b    'FK9 ','FK0 '
  71.         Dc.b    'KP( ','KP) ','KP/ ','KP* '
  72.         dc.b    'KP+ '
  73.         dc.b    'HLP ','LSH ','RSH '
  74.         dc.b    'CPL ','CTL '
  75.         Dc.b    'LAL ','RAL ','LAM ','RAM '
  76.         dc.b    '    ','    ','    ','    '
  77.         dc.b    '    ','    '
  78.         Dc.b    '    ','    ','    ','    '
  79.         dc.b    '    ','    ','    ','    '
  80.         dc.b    '    ','    '
  81.  
  82.  even
  83.  
  84. FINISHEDLEVEL: dc.w 0
  85.  
  86.  
  87. START:
  88. ************************************88
  89. * TAKE OUT WHEN PLAYING MODULE AGAIN
  90. ********************************
  91.     PRSDF
  92.     PRSDE
  93. ************************************
  94.  
  95. ; move.l #PROTCALLENC,a0
  96. ; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
  97. ; move.l #$75055345,d0
  98. ;codeitup:
  99. ; sub.l d0,(a0)+
  100. ; ror.l #1,d0
  101. ; dbra d1,codeitup
  102. ;
  103. ; rts
  104.  
  105.  PRSDA
  106.  
  107.  move.w #$7201,titleplanes
  108.  
  109.  move.l 4.w,a6
  110.  move.l #doslibname,a1
  111.  moveq #0,d0
  112.  jsr -552(a6)
  113.  move.l d0,doslib
  114.  PRSDS
  115.  jsr stuff
  116.  
  117.  jsr _InitLowLevel
  118.  
  119.  jsr CLEARTITLEPAL
  120.  
  121.  PRSDT
  122.  
  123.  move.w #$20,$dff1dc
  124.  move.l #titlecop,$dff080
  125.  PRSDV
  126.  move.w #$87c0,$dff000+dmacon
  127.  move.w #$8020,$dff000+dmacon
  128.  move.w $dff006,d0
  129.  add.w d0,RVAL2 
  130.  
  131.  bsr GETTITLEMEM
  132.  PRSDU
  133.  bsr CLROPTSCRN
  134.  
  135.  bsr SETUPTITLESCRN
  136.  
  137. ; jsr _InitPlayer
  138.  
  139. ; move.l #INTROTUNENAME,a0
  140. ; jsr _LoadModule
  141. ; move.l d0,INTROTUNEADDR
  142.  PRSDY
  143. ; move.l d0,a0
  144. ; jsr _InitModule
  145.  
  146. ; move.l INTROTUNEADDR,a0
  147. ; jsr _PlayModule
  148.  PRSDa
  149.  bsr LOADTITLESCRN
  150.  
  151.  move.w #0,FADEVAL
  152.  move.w #63,FADEAMOUNT
  153.  bsr FADEUPTITLE
  154.  PRSDB
  155.  jsr LOAD_SFX
  156.  jsr LOADFLOOR
  157.  jsr LOADOBS
  158.  PRSDZ
  159.  
  160.  move.w #31,FADEAMOUNT
  161.  PRSDC
  162.  bsr FADEDOWNTITLE 
  163.  
  164. ; bsr ASKFORDISK
  165.  
  166.  jsr LOADWALLS
  167. ; jsr _StopPlayer
  168.  PRSDW
  169.  PRSDX
  170. ; jsr _RemPlayer
  171.  
  172.  move.l #newblag,$80
  173.  trap #0
  174.  rts
  175.  
  176. newblag:
  177.  
  178. ; bsr PROTSETUP
  179.  
  180.  move.l INTROTUNEADDR,a0
  181. ; jsr _UnLoadModule
  182.  jsr KInt_Init
  183.  bsr DEFAULTGAME
  184.  
  185. BACKTOMENU:
  186.  
  187.  bsr READMAINMENU
  188.  
  189.  bsr WAITREL
  190.  
  191.  move.l OLDKINT,$68.w
  192.     xxxxxxxxxxxx 
  193.  bsr CLRSPRITES
  194.  
  195.  move.w #31,FADEAMOUNT
  196.  bsr FADEUPTITLE
  197.  move.w #63,FADEAMOUNT
  198.  bsr FADEDOWNTITLE
  199.  
  200.  move.w #$0201,titleplanes
  201.  
  202.  bsr RELEASETITLEMEM
  203.  
  204.  bsr SETPLAYERS
  205.  
  206.  clr.b FINISHEDLEVEL
  207.  bsr LOADBOTPIC
  208.  
  209.  move.w #0,PLR1_angpos
  210.  move.w #0,PLR2_angpos
  211.  move.b #0,PLR1_GunSelected
  212.  move.b #0,PLR2_GunSelected
  213.  
  214.  jsr PLAYTHEGAME
  215.  
  216.  bsr FREEBOTMEM 
  217.  
  218. ; bra QUITTT
  219.  
  220.  tst.b FINISHEDLEVEL
  221.  beq dontusestats
  222.  bsr CALCPASSWORD
  223. dontusestats:
  224.  bsr PASSLINETOGAME
  225.  bsr GETSTATS
  226.  
  227.  bsr GETTITLEMEM
  228.  bsr CLROPTSCRN
  229.  bsr SETUPTITLESCRN
  230.  
  231.  bsr LOADTITLESCRN
  232.  move.w #$7201,titleplanes
  233.  
  234.  move.w #$20,$dff1dc
  235.  move.l #titlecop,$dff080
  236.  move.w #$87c0,$dff000+dmacon
  237.  move.w #$8020,$dff000+dmacon 
  238.  
  239.  move.w #0,FADEVAL
  240.  move.w #63,FADEAMOUNT
  241.  bsr FADEUPTITLE
  242.  
  243.  move.w #31,FADEAMOUNT
  244.  bsr FADEDOWNTITLE 
  245.  
  246.  jsr KInt_Init
  247.  bra BACKTOMENU
  248.  
  249. QUITTT:
  250.  
  251.  jsr RELEASEWALLMEM
  252.  jsr RELEASESAMPMEM
  253.  jsr RELEASEFLOORMEM
  254.  jsr RELEASEOBJMEM
  255.   
  256.  rte
  257.  
  258. ; KEY OPTIONS:
  259. CONTROLBUFFER:
  260. turn_left_key:
  261.  dc.b $4f
  262. turn_right_key:
  263.  dc.b $4e
  264. forward_key:
  265.  dc.b $4c
  266. backward_key:
  267.  dc.b $4d
  268. fire_key:
  269.  dc.b $65
  270. operate_key:
  271.  dc.b $40
  272. run_key:
  273.  dc.b $61
  274. force_sidestep_key:
  275.  dc.b $67
  276. sidestep_left_key:
  277.  dc.b $39
  278. sidestep_right_key:
  279.  dc.b $3a
  280. duck_key:
  281.  dc.b $22
  282. look_behind_key:
  283.  dc.b $28
  284.  
  285. templeftkey: dc.b 0
  286. temprightkey: dc.b 0
  287. tempslkey: dc.b 0 
  288. tempsrkey: dc.b 0
  289.  
  290.  even 
  291.  
  292. GETSTATS:
  293. ; CHANGE PASSWORD INTO RAW DATA
  294.  
  295.  move.b PASSBUFFER,d0
  296.  and.w #$7f,d0
  297.  move.w d0,PLR1_energy
  298.  move.b PASSBUFFER+1,d0
  299.  btst #7,d0
  300.  sne PLR1_GunData+32+7
  301.  btst #6,d0
  302.  sne PLR1_GunData+32*2+7
  303.  btst #5,d0
  304.  sne PLR1_GunData+32*4+7
  305.  btst #4,d0
  306.  sne PLR1_GunData+32*7+7
  307.  and.w #%1111,d0
  308.  move.w d0,MAXLEVEL
  309.  move.b PASSBUFFER+2,d0
  310.  and.w #$7f,d0
  311.  lsl.w #3,d0
  312.  move.w d0,PLR1_GunData
  313.  move.b PASSBUFFER+3,d0
  314.  and.w #$7f,d0
  315.  lsl.w #3,d0
  316.  move.w d0,PLR1_GunData+32
  317.  move.b PASSBUFFER+4,d0
  318.  and.w #$7f,d0
  319.  lsl.w #3,d0
  320.  move.w d0,PLR1_GunData+32*2
  321.  move.b PASSBUFFER+5,d0
  322.  and.w #$7f,d0
  323.  lsl.w #3,d0
  324.  move.w d0,PLR1_GunData+32*4
  325.  move.b PASSBUFFER+6,d0
  326.  and.w #$7f,d0
  327.  lsl.w #3,d0
  328.  move.w d0,PLR1_GunData+32*7
  329.  rts
  330.  
  331.  
  332. SETPLAYERS:
  333.  
  334.  move.w PLOPT,d0
  335.  add.b #'a',d0
  336.  move.b d0,LEVA
  337.  move.b d0,LEVB
  338.  move.b d0,LEVC
  339.  
  340.  cmp.b #'s',mors
  341.  beq SLAVESETUP
  342.  cmp.b #'m',mors
  343.  beq MASTERSETUP
  344.  st NASTY
  345. onepla:
  346.  rts
  347.  
  348. NASTY: dc.w 0
  349.  
  350. MASTERSETUP:
  351.  bsr TWOPLAYER
  352.  clr.b NASTY
  353.  move.w PLOPT,d0
  354.  jsr SENDFIRST
  355.  rts
  356.  
  357. SLAVESETUP:
  358.  bsr TWOPLAYER
  359.  CLR.B NASTY
  360.  jsr RECFIRST
  361.  move.w d0,PLOPT
  362.  add.b #'a',d0
  363.  move.b d0,LEVA
  364.  move.b d0,LEVB
  365.  move.b d0,LEVC
  366.  rts
  367.      
  368. ********************************************************
  369.  
  370. ASKFORDISK:
  371.  PRSDD
  372.  move.w #3,OptScrn
  373.  bsr DRAWOPTSCRN
  374.  
  375. .wtrel:
  376.  btst #7,$bfe001
  377.  beq.s .wtrel
  378.  
  379. wtclick:
  380.  add.w #$235,RVAL1
  381.  btst #6,$bfe001
  382.  bne.s wtclick
  383.  
  384.  rts
  385.  
  386. CLRSPRITES: 
  387.  move.l #nullspr,d0
  388.  move.w d0,tsp0l
  389.  move.w d0,tsp1l
  390.  move.w d0,tsp2l
  391.  move.w d0,tsp3l
  392.  move.w d0,tsp4l
  393.  move.w d0,tsp5l
  394.  move.w d0,tsp6l
  395.  move.w d0,tsp7l
  396.  swap d0
  397.  move.w d0,tsp0h
  398.  move.w d0,tsp1h
  399.  move.w d0,tsp2h
  400.  move.w d0,tsp3h
  401.  move.w d0,tsp4h
  402.  move.w d0,tsp5h
  403.  move.w d0,tsp6h
  404.  move.w d0,tsp7h 
  405.  rts
  406.  
  407. ********************************************************
  408.  
  409. READMAINMENU:
  410.  
  411.  move.b #'n',mors
  412.  
  413.  move.w MAXLEVEL,d0
  414.  
  415.  move.l #CURRENTLEVELLINE,a1
  416.  muls #40,d0
  417.  move.l #LEVEL_OPTS,a0
  418.  add.l d0,a0
  419.  bsr PUTINLINE
  420.  
  421. ; Stay here until 'play game' is selected.
  422.  
  423.  move.w #0,OptScrn
  424.  bsr DRAWOPTSCRN
  425.  move.w #0,OPTNUM
  426.  
  427.  bsr HIGHLIGHT
  428.  
  429.  bsr WAITREL
  430. .rdlop:
  431.  bsr CHECKMENU
  432.  tst.w d0
  433.  blt.s .rdlop
  434.  
  435.  bne .noopt
  436.  
  437.  bra MASTERMENU
  438.  
  439. .noopt:
  440.  
  441.  cmp.w #1,d0
  442.  beq playgame
  443.  
  444.  cmp.w #2,d0
  445.  bne .nocontrol
  446.  
  447.  bsr CHANGECONTROLS
  448.  
  449.  move.w #0,OptScrn
  450.  bsr DRAWOPTSCRN
  451.  move.w #0,OPTNUM
  452.  
  453.  bsr HIGHLIGHT
  454.  
  455.  bsr WAITREL
  456.  bra .rdlop
  457.  
  458. .nocontrol:
  459.  
  460.  cmp.w #3,d0
  461.  bne .nocred
  462. ; bsr VIEWCREDS
  463.  move.w #0,OptScrn
  464.  bsr DRAWOPTSCRN
  465.  move.w #0,OPTNUM
  466.  
  467.  bsr HIGHLIGHT
  468.  
  469.  bsr WAITREL
  470.  bra .rdlop
  471.  
  472.  
  473. .nocred:
  474.  
  475.  cmp.w #4,d0
  476.  bne playgame
  477.  bsr WAITREL
  478.  
  479.  move.l #PASSWORDLINE+12,a0
  480.  moveq #15,d2
  481. .clrline:
  482.  move.b #32,(a0)+
  483.  dbra d2,.clrline 
  484.  move.w #0,OptScrn
  485.  bsr DRAWOPTSCRN
  486.  
  487.  clr.b lastpressed
  488.  move.l #PASSWORDLINE+12,a0
  489.  move.w #0,d1
  490. .ENTERPASS:
  491.  tst.b lastpressed
  492.  beq .ENTERPASS
  493.  move.b lastpressed,d2
  494.  move.b #0,lastpressed
  495.  move.l #KVALTOASC,a1
  496.  
  497.  cmp.l #'<-- ',(a1,d2.w*4)
  498.  bne .nodel
  499.  
  500.  tst.b d1
  501.  beq .nodel
  502.  
  503.  subq #1,d1
  504.  move.b #32,-(a0)
  505.  bsr JUSTDRAWIT
  506.  bra .ENTERPASS
  507.  
  508. .nodel:
  509.  
  510.  cmp.l #'RTN ',(a1,d2.w*4)
  511.  beq .FORGETIT
  512.  cmp.l #'ESC ',(a1,d2.w*4)
  513.  beq .FORGETIT
  514.  move.b 1(a1,d2.w*4),d2
  515.  cmp.b #65,d2
  516.  blt .ENTERPASS
  517.  cmp.b #'Z',d2
  518.  bgt .ENTERPASS
  519.  move.b d2,(a0)+
  520.  move.w #0,OptScrn
  521.  movem.l d0-d7/a0-a6,-(a7)
  522.  bsr JUSTDRAWIT
  523.  movem.l (a7)+,d0-d7/a0-a6
  524.  add.w #1,d1
  525.  cmp.w #16,d1
  526.  blt .ENTERPASS
  527.  
  528.  bsr PASSLINETOGAME
  529.  tst.w d0
  530.  bne .FORGETIT
  531.  
  532.  bsr GETSTATS
  533.  move.w MAXLEVEL,d0
  534.  move.l #CURRENTLEVELLINE,a1
  535.  muls #40,d0
  536.  move.l #LEVEL_OPTS,a0
  537.  add.l d0,a0
  538.  bsr PUTINLINE
  539.  
  540. .FORGETIT:
  541.  bsr WAITREL
  542.  bsr CALCPASSWORD
  543.  
  544.  move.w #0,OptScrn
  545.  bsr DRAWOPTSCRN
  546.  
  547.  move.w #0,OPTNUM
  548.  
  549.  bsr HIGHLIGHT
  550.  
  551.  bra .rdlop 
  552.  
  553. playgame:
  554.  
  555.  move.w MAXLEVEL,PLOPT
  556.  rts
  557.  
  558. LEVELSELECTED:
  559.  dc.w 0
  560.  
  561. MASTERMENU:
  562.  
  563.  move.b #'m',mors
  564.  
  565.  move.w #0,LEVELSELECTED
  566.  
  567.  move.w #0,d0 
  568.  move.l #CURRENTLEVELLINEM,a1
  569.  muls #40,d0
  570.  move.l #LEVEL_OPTS,a0
  571.  add.l d0,a0
  572.  bsr PUTINLINE
  573.  
  574. ; Stay here until 'play game' is selected.
  575.  
  576.  move.w #4,OptScrn
  577.  bsr DRAWOPTSCRN
  578.  move.w #0,OPTNUM
  579.  
  580.  bsr HIGHLIGHT
  581.  
  582.  bsr WAITREL
  583. .rdlop:
  584.  bsr CHECKMENU
  585.  tst.w d0
  586.  blt.s .rdlop
  587.  bsr WAITREL
  588.  
  589.  cmp.w #1,d0
  590.  bne.s .nonextlev
  591.  
  592.  move.w LEVELSELECTED,d0
  593.  add.w #1,d0
  594.  cmp.w MAXLEVEL,d0
  595.  blt .nowrap
  596.  moveq #0,d0
  597. .nowrap:
  598.  move.w d0,LEVELSELECTED
  599.  move.l #CURRENTLEVELLINEM,a1
  600.  muls #40,d0
  601.  move.l #LEVEL_OPTS,a0
  602.  add.l d0,a0
  603.  bsr PUTINLINE
  604.  bsr JUSTDRAWIT
  605.  bra .rdlop
  606.  
  607. .nonextlev:
  608.  cmp.w #2,d0
  609.  beq .playgame
  610.  
  611.  cmp.w #0,d0
  612.  bne .noopt
  613.  
  614.  bra SLAVEMENU
  615.  
  616. .noopt:
  617.  
  618.  cmp.w #3,d0
  619.  bne .nocontrol
  620.  
  621.  bsr CHANGECONTROLS
  622.  
  623.  move.w #4,OptScrn
  624.  bsr DRAWOPTSCRN
  625.  move.w #0,OPTNUM
  626.  
  627.  bsr HIGHLIGHT
  628.  
  629.  bsr WAITREL
  630.  bra .rdlop
  631.  
  632. .nocontrol:
  633.  
  634. .playgame
  635.  
  636.  move.w LEVELSELECTED,PLOPT
  637.  rts
  638.  
  639. SLAVEMENU:
  640.  
  641.  move.b #'s',mors
  642.  
  643. ; Stay here until 'play game' is selected.
  644.  
  645.  move.w #5,OptScrn
  646.  bsr DRAWOPTSCRN
  647.  move.w #0,OPTNUM
  648.  
  649.  bsr HIGHLIGHT
  650.  
  651.  bsr WAITREL
  652. .rdlop:
  653.  bsr CHECKMENU
  654.  tst.w d0
  655.  blt.s .rdlop
  656.  bsr WAITREL
  657.  
  658.  cmp.w #1,d0
  659.  beq playgame
  660.  
  661.  cmp.w #0,d0
  662.  bne .noopt
  663.  
  664.  bra READMAINMENU
  665.  
  666. .noopt:
  667.  
  668.  cmp.w #2,d0
  669.  bne .nocontrol
  670.  
  671.  bsr CHANGECONTROLS
  672.  
  673.  move.w #0,OptScrn
  674.  bsr DRAWOPTSCRN
  675.  move.w #0,OPTNUM
  676.  
  677.  bsr HIGHLIGHT
  678.  
  679.  bsr WAITREL
  680.  bra .rdlop
  681.  
  682. .nocontrol:
  683.  
  684.  rts
  685.  
  686. TWOPLAYER
  687.  move.w #0,OldEnergy
  688.  move.w #127,Energy
  689.  jsr EnergyBar
  690.  
  691.  move.w #63,OldAmmo
  692.  move.w #0,Ammo
  693.  jsr AmmoBar
  694.  move.w #0,OldAmmo
  695.  
  696.  move.w #127,PLR1_energy
  697.  move.w #127,PLR2_energy 
  698.  move.w #160,PLR1_GunData    ; 10 shots pistol
  699.  st PLR1_GunData+7
  700.  
  701.  st.b PLR1_GunData+32+7
  702.  move.w #80*4,PLR1_GunData+32
  703.  
  704.  st.b PLR1_GunData+64+7
  705.  move.w #80*4,PLR1_GunData+64
  706.  
  707.  st.b PLR1_GunData+32*3+7
  708.  move.w #80*4,PLR1_GunData+32*3
  709.  
  710.  st.b PLR1_GunData+32*4+7
  711.  move.w #80*4,PLR1_GunData+32*4
  712.  
  713.  st.b PLR1_GunData+32*7+7
  714.  move.w #80*4,PLR1_GunData+32*7
  715.  
  716.  move.b #0,PLR1_GunSelected
  717.  
  718.  move.w #160,PLR2_GunData    ; 10 shots pistol
  719.  st PLR2_GunData+7
  720.  st.b PLR2_GunData+32+7
  721.  move.w #80*4,PLR2_GunData+32
  722.  
  723.  st.b PLR2_GunData+64+7
  724.  move.w #80*4,PLR2_GunData+64
  725.  
  726.  st.b PLR2_GunData+32*3+7
  727.  move.w #80*4,PLR2_GunData+32*3
  728.  
  729.  st.b PLR2_GunData+32*4+7
  730.  move.w #80*4,PLR2_GunData+32*4
  731.  
  732.  st.b PLR2_GunData+32*7+7
  733.  move.w #80*4,PLR2_GunData+32*7
  734.  move.b #0,PLR2_GunSelected
  735.  
  736. newdum:
  737.  rts
  738.  
  739. DEFAULTGAME:
  740.  move.w #0,MAXLEVEL
  741.  
  742.  move.w #0,OldEnergy
  743.  move.w #127,Energy
  744.  jsr EnergyBar
  745.  
  746.  move.w #63,OldAmmo
  747.  move.w #0,Ammo
  748.  jsr AmmoBar
  749.  move.w #0,OldAmmo
  750.  
  751.  move.w #127,PLR1_energy
  752.  move.w #127,PLR2_energy 
  753.  move.w #160,PLR1_GunData    ; 10 shots pistol
  754.  st PLR1_GunData+7
  755.  clr.b PLR1_GunData+32+7
  756.  clr.w PLR1_GunData+32
  757.  clr.b PLR1_GunData+64+7
  758.  clr.w PLR1_GunData+64
  759.  clr.b PLR1_GunData+32*3+7
  760.  clr.w PLR1_GunData+32*3
  761.  clr.b PLR1_GunData+32*4+7
  762.  clr.w PLR1_GunData+32*4
  763.  clr.b PLR1_GunData+32*7+7
  764.  clr.w PLR1_GunData+32*7
  765.  move.b #0,PLR1_GunSelected
  766.  
  767. ; move.l #RealTable-2000,a3
  768. ; move.l #PROTCALC-5000,a1
  769. ; move.l #ASKFORPROT-10000,a2
  770. ; move.l #PROTCALLENC-800,a4
  771. ; adda.w #800,a4
  772. ; jsr (a4)
  773.  
  774. ************************************************
  775. * TEMPORARY MEASURE: REMOVE BEFORE RELEASE *****
  776. ************************************************
  777.  
  778. ; tst.w protA
  779. ; bne.s .noreset
  780. ; move.l #0,a7
  781. ;.noreset:
  782.  
  783. ************************************************
  784.  
  785.  move.w #160,PLR2_GunData    ; 10 shots pistol
  786.  st PLR2_GunData+7
  787.  clr.b PLR2_GunData+32+7
  788.  clr.w PLR2_GunData+32
  789.  clr.b PLR2_GunData+64+7
  790.  clr.w PLR2_GunData+64
  791.  clr.b PLR2_GunData+32*3+7
  792.  clr.w PLR2_GunData+32*3
  793.  clr.b PLR2_GunData+32*4+7
  794.  clr.w PLR2_GunData+32*4
  795.  clr.b PLR2_GunData+32*7+7
  796.  clr.w PLR2_GunData+32*7
  797.  move.b #0,PLR2_GunSelected
  798.  
  799.  bsr CALCPASSWORD
  800.  
  801.  rts
  802.  
  803. GETPARITY:
  804.  move.w #6,d3
  805. .calcparity:
  806.  btst d3,d0
  807.  beq.s .nochange
  808.  bchg #7,d0
  809. .nochange:
  810.  dbra d3,.calcparity
  811.  rts
  812.  
  813. CHECKPARITY:
  814.  move.w #6,d3
  815.  move.b #$0,d2
  816. .calcparity:
  817.  btst d3,d0
  818.  beq.s .nochange
  819.  bchg #7,d2
  820. .nochange:
  821.  dbra d3,.calcparity
  822.  move.b d0,d1
  823.  and.b #$80,d1
  824.  eor.b d1,d2
  825.  sne.s d5
  826.  rts
  827.  
  828. CALCPASSWORD:
  829.  move.b PLR1_energy+1,d0
  830.  bsr GETPARITY
  831.  move.b d0,PASSBUFFER
  832.  moveq #0,d0
  833.  tst.b PLR1_GunData+32+7
  834.  sne d0
  835.  lsl.w #1,d0
  836.  tst.b PLR1_GunData+64+7
  837.  sne d0
  838.  lsl.w #1,d0
  839.  tst.b PLR1_GunData+32*4+7
  840.  sne d0
  841.  lsl.w #1,d0
  842.  tst.b PLR1_GunData+32*7+7
  843.  sne d0
  844.  lsr.w #3,d0
  845.  and.b #%11110000,d0
  846.  or.b MAXLEVEL+1,d0
  847.  move.b d0,PASSBUFFER+1
  848.  eor.b #%10110101,d0
  849.  neg.b d0
  850.  add.b #50,d0
  851.  move.b d0,PASSBUFFER+7
  852.  
  853.  move.w PLR1_GunData,d0
  854.  lsr.w #3,d0
  855.  bsr GETPARITY
  856.  move.b d0,PASSBUFFER+2
  857.  move.w PLR1_GunData+32,d0
  858.  lsr.w #3,d0
  859.  bsr GETPARITY
  860.  move.b d0,PASSBUFFER+3
  861.  move.w PLR1_GunData+32*2,d0
  862.  lsr.w #3,d0
  863.  bsr GETPARITY
  864.  move.b d0,PASSBUFFER+4
  865.  move.w PLR1_GunData+32*4,d0
  866.  lsr.w #3,d0
  867.  bsr GETPARITY
  868.  move.b d0,PASSBUFFER+5
  869.  move.w PLR1_GunData+32*7,d0
  870.  lsr.w #3,d0
  871.  bsr GETPARITY
  872.  move.b d0,PASSBUFFER+6
  873.  
  874.  move.w #3,d0
  875.  move.l #PASSBUFFER,a0
  876.  move.l #PASSBUFFER+8,a1
  877.  move.l #PASS,a2
  878.  moveq #0,d4
  879. mixemup:
  880.  move.b (a0)+,d1
  881.  move.b -(a1),d2
  882.  not.b d2
  883.  moveq #0,d3
  884.  lsr.b #1,d1
  885.  addx.w d3,d3
  886.  lsr.b #1,d2
  887.  addx.w d3,d3
  888.  lsr.b #1,d1
  889.  addx.w d3,d3
  890.  lsr.b #1,d2
  891.  addx.w d3,d3
  892.  lsr.b #1,d1
  893.  addx.w d3,d3
  894.  lsr.b #1,d2
  895.  addx.w d3,d3
  896.  lsr.b #1,d1
  897.  addx.w d3,d3
  898.  lsr.b #1,d2
  899.  addx.w d3,d3
  900.  lsr.b #1,d1
  901.  addx.w d3,d3
  902.  lsr.b #1,d2
  903.  addx.w d3,d3
  904.  lsr.b #1,d1
  905.  addx.w d3,d3
  906.  lsr.b #1,d2
  907.  addx.w d3,d3
  908.  lsr.b #1,d1
  909.  addx.w d3,d3
  910.  lsr.b #1,d2
  911.  addx.w d3,d3
  912.  lsr.b #1,d1
  913.  addx.w d3,d3
  914.  lsr.b #1,d2
  915.  addx.w d3,d3
  916.  move.w d3,(a2)+
  917.  
  918.  dbra d0,mixemup
  919.  
  920.  move.l #PASSWORDLINE+12,a0
  921.  move.l #PASS,a1
  922.  move.w #7,d0
  923. putinpassline:
  924.  move.b (a1),d1
  925.  and.b #%1111,d1
  926.  add.b #65,d1
  927.  move.b d1,(a0)+
  928.  move.b (a1)+,d1
  929.  lsr.b #4,d1
  930.  and.b #%1111,d1
  931.  add.b #65,d1
  932.  move.b d1,(a0)+
  933.  dbra d0,putinpassline
  934.  rts
  935.  
  936. PASSLINETOGAME:
  937.  move.l #PASSWORDLINE+12,a0
  938.  move.l #PASS,a1
  939.  move.w #7,d0
  940. getbuff:
  941.  move.b (a0)+,d1
  942.  move.b (a0)+,d2
  943.  sub.b #65,d1
  944.  sub.b #65,d2
  945.  and.b #%1111,d1
  946.  and.b #%1111,d2
  947.  lsl.b #4,d2
  948.  or.b d2,d1
  949.  move.b d1,(a1)+
  950.  dbra d0,getbuff
  951.  
  952.  move.l #PASS,a0
  953.  move.l #PASSBUFFER,a1
  954.  move.l #PASSBUFFER+8,a2
  955.  move.w #3,d0
  956.  moveq #0,d4
  957. unmix:
  958.  move.w (a0)+,d1
  959.  moveq #0,d2
  960.  moveq #0,d3
  961.  lsr.w #1,d1
  962.  addx.w d3,d3
  963.  lsr.w #1,d1
  964.  addx.w d2,d2
  965.  lsr.w #1,d1
  966.  addx.w d3,d3
  967.  lsr.w #1,d1
  968.  addx.w d2,d2
  969.  lsr.w #1,d1
  970.  addx.w d3,d3
  971.  lsr.w #1,d1
  972.  addx.w d2,d2
  973.  lsr.w #1,d1
  974.  addx.w d3,d3
  975.  lsr.w #1,d1
  976.  addx.w d2,d2
  977.  lsr.w #1,d1
  978.  addx.w d3,d3
  979.  lsr.w #1,d1
  980.  addx.w d2,d2
  981.  lsr.w #1,d1
  982.  addx.w d3,d3
  983.  lsr.w #1,d1
  984.  addx.w d2,d2
  985.  lsr.w #1,d1
  986.  addx.w d3,d3
  987.  lsr.w #1,d1
  988.  addx.w d2,d2
  989.  lsr.w #1,d1
  990.  addx.w d3,d3
  991.  lsr.w #1,d1
  992.  addx.w d2,d2
  993.  not.b d3
  994.  move.b d3,-(a2)
  995.  move.b d2,(a1)+
  996.  dbra d0,unmix
  997.  
  998.  move.b PASSBUFFER,d0
  999.  bsr CHECKPARITY
  1000.  tst.b d5
  1001.  bne illega
  1002.  move.b PASSBUFFER+2,d0
  1003.  bsr CHECKPARITY
  1004.  tst.b d5
  1005.  bne illega
  1006.  move.b PASSBUFFER+3,d0
  1007.  bsr CHECKPARITY
  1008.  tst.b d5
  1009.  bne illega
  1010.  move.b PASSBUFFER+4,d0
  1011.  bsr CHECKPARITY
  1012.  tst.b d5
  1013.  bne illega
  1014.  move.b PASSBUFFER+5,d0
  1015.  bsr CHECKPARITY
  1016.  tst.b d5
  1017.  bne illega
  1018.  move.b PASSBUFFER+6,d0
  1019.  bsr CHECKPARITY
  1020.  tst.b d5
  1021.  bne illega
  1022.  
  1023.  move.b PASSBUFFER+1,d0
  1024.  eor.b #%10110101,d0
  1025.  neg.b d0
  1026.  add.b #50,d0
  1027.  cmp.b PASSBUFFER+7,d0
  1028.  bne illega
  1029.  
  1030.  move.w #0,d0
  1031.  rts
  1032.  
  1033. illega:
  1034.  
  1035.  move.w #-1,d0
  1036.  
  1037.  rts
  1038.  
  1039. PASSBUFFER:
  1040.  ds.b 8
  1041.  
  1042. CHECKBUFFER: ds.b 8
  1043.  
  1044. PASS:
  1045.  ds.b 16
  1046.  
  1047. **************************************************
  1048.  
  1049. CHANGECONTROLS:
  1050.  
  1051.  move.w #6,OptScrn
  1052.  bsr DRAWOPTSCRN
  1053.  move.w #0,OPTNUM
  1054.  bsr HIGHLIGHT
  1055.  bsr WAITREL
  1056.  
  1057. .rdlop:
  1058.  bsr CHECKMENU
  1059.  tst.w d0
  1060.  blt.s .rdlop
  1061.  
  1062.  cmp.w #12,d0
  1063.  beq .backtomain
  1064.  
  1065.  move.l #KEY_LINES,a0
  1066.  move.w d0,d1
  1067.  muls #40,d1
  1068.  add.l d1,a0
  1069.  add.w #32,a0
  1070.  move.l #$20202020,(a0)
  1071.  movem.l d0/a0,-(a7)
  1072.  bsr JUSTDRAWIT
  1073.  movem.l (a7)+,d0/a0 
  1074.  
  1075.  clr.b lastpressed
  1076.  
  1077. .wtkey
  1078.  tst.b lastpressed
  1079.  beq .wtkey
  1080.  
  1081.  move.l #CONTROLBUFFER,a1
  1082.  moveq #0,d1
  1083.  move.b lastpressed,d1
  1084.  move.b d1,(a1,d0.w)
  1085.  move.l #KVALTOASC,a1
  1086.  move.l (a1,d1.w*4),(a0)
  1087.  bsr JUSTDRAWIT
  1088.  bsr WAITREL
  1089.  bra .rdlop
  1090.  
  1091. .backtomain:
  1092.  rts
  1093.  
  1094. **************************************************
  1095.  
  1096.  
  1097. MAXLEVEL: dc.w 0
  1098.  
  1099. SHOWCREDITS:
  1100.  move.w #2,OptScrn
  1101.  bsr DRAWOPTSCRN
  1102.  move.w #0,OPTNUM
  1103.  bsr HIGHLIGHT
  1104.  
  1105.  bsr WAITREL
  1106.  
  1107. .rdlop:
  1108.  bsr CHECKMENU
  1109.  tst.w d0
  1110.  blt.s .rdlop
  1111.  
  1112.  bra READMAINMENU
  1113.  
  1114. HELDDOWN:
  1115.  dc.w 0
  1116.  
  1117. WAITREL:
  1118.  move.l #KeyMap,a5
  1119. WAITREL2:
  1120.  btst #7,$bfe001
  1121.  beq.s WAITREL2
  1122.  tst.b $40(a5)
  1123.  bne.s WAITREL2
  1124.  tst.b $44(a5)
  1125.  bne.s WAITREL2
  1126.  tst.b $4c(a5)
  1127.  bne.s WAITREL2
  1128.  tst.b $4d(a5)
  1129.  bne.s WAITREL2
  1130.  rts
  1131.  
  1132. PUTINLINE:
  1133.  moveq #39,d0
  1134. pill
  1135.  move.b (a0)+,(a1)+
  1136.  dbra d0,pill
  1137.  rts
  1138.  
  1139. CHECKMENU:
  1140.  btst #1,$dff00c
  1141.  sne d0
  1142.  btst #1,$dff00d
  1143.  sne d1
  1144.  btst #0,$dff00c
  1145.  sne d2
  1146.  btst #0,$dff00d
  1147.  sne d3
  1148.  
  1149.  eor.b d0,d2
  1150.  eor.b d1,d3
  1151.  
  1152.  move.l #KeyMap,a5
  1153.  move.b $4c(a5),d0
  1154.  move.b $4d(a5),d1
  1155.  or.b d1,d3
  1156.  or.b d0,d2
  1157.  
  1158.  move.w OptScrn,d0
  1159.  move.l #MENUDATA,a0
  1160.  move.l 4(a0,d0.w*8),a0    ; opt data
  1161.  
  1162.  move.w OPTNUM,d0
  1163.  
  1164.  tst.b d2
  1165.  beq.s NOPREV
  1166.  
  1167.  tst.b HELDDOWN
  1168.  bne NOPREV
  1169.  
  1170.  sub.w #1,d0
  1171.  bge.s NOPREV
  1172.  
  1173.  move.w #0,d0 
  1174.  
  1175. NOPREV:
  1176.  
  1177.  tst.b d3
  1178.  beq.s NONEXT
  1179.  tst.b HELDDOWN
  1180.  bne NONEXT
  1181.  
  1182.  add.w #1,d0
  1183.  tst.w (a0,d0.w*8)
  1184.  bge.s NONEXT
  1185.  
  1186.  subq #1,d0
  1187.  
  1188. NONEXT:
  1189.  
  1190.  or.b d2,d3
  1191.  move.b d3,HELDDOWN
  1192.  
  1193.  cmp.w OPTNUM,d0
  1194.  beq.s .nochange
  1195.  
  1196.  bsr HIGHLIGHT
  1197.  move.w d0,OPTNUM
  1198.  bsr HIGHLIGHT
  1199.  
  1200. .nochange:
  1201.  
  1202.  move.w #-1,d0
  1203.  
  1204.  btst #7,$bfe001
  1205.  beq.s select
  1206.  move.b $40(a5),d1
  1207.  or.b $44(a5),d1
  1208.  tst.b d1
  1209.  beq.s noselect
  1210.  
  1211. select:
  1212.  move.w OPTNUM,d0
  1213. noselect:
  1214.  
  1215.  rts
  1216.  
  1217. HIGHLIGHT:
  1218.  
  1219.  SAVEREGS
  1220.  
  1221.  move.w OptScrn,d0
  1222.  move.l #MENUDATA,a0
  1223.  move.l 4(a0,d0.w*8),a0
  1224.  move.w OPTNUM,d0
  1225.  lea (a0,d0.w*8),a0
  1226.  move.w (a0)+,d0    ;left
  1227.  move.w (a0)+,d1    ;top
  1228.  move.w (a0)+,d2    ;width
  1229.  
  1230.  muls #16*8,d1
  1231.  move.l OPTSPRADDR,a1
  1232.  add.w d1,a1
  1233.  add.w #8+16,a1
  1234.  move.l #SCRTOSPR2,a5
  1235.  adda.w d0,a5
  1236.  adda.w d0,a5
  1237.  
  1238. NOTLOP:
  1239.  
  1240.  move.w (a5)+,d3
  1241.  lea (a1,d3.w),a2
  1242.  not.b (a2)
  1243.  not.b 16(a2)
  1244.  not.b 32(a2)
  1245.  not.b 48(a2)
  1246.  not.b 64(a2)
  1247.  not.b 80(a2)
  1248.  not.b 96(a2)
  1249.  not.b 112(a2)
  1250.  not.b 128(a2)
  1251.  subq #1,d2
  1252.  bgt.s NOTLOP
  1253.  
  1254.  GETREGS
  1255.  rts
  1256.  
  1257. SCRTOSPR2:
  1258. val SET 0
  1259.  REPT 6
  1260.  dc.w val+0
  1261.  dc.w val+1
  1262.  dc.w val+2
  1263.  dc.w val+3
  1264.  dc.w val+4
  1265.  dc.w val+5
  1266.  dc.w val+6
  1267.  dc.w val+7
  1268. val SET val+258*16
  1269.  ENDR
  1270.  
  1271. CLROPTSCRN:
  1272.  
  1273.  move.l #$2cdfea,d0
  1274.  move.w (a4,d0.l),d0
  1275.  add.w d0,RVAL2
  1276.  
  1277.  move.l OPTSPRADDR,a0
  1278.  lea 16(a0),a1
  1279.  lea 16+(258*16)(a0),a2
  1280.  lea 16+(258*16*2)(a0),a3
  1281.  lea 16+(258*16*3)(a0),a4
  1282.  lea 258*16(a4),a0
  1283.  
  1284.  move.w #256,d0
  1285.  moveq #0,d1
  1286. CLRLOP:
  1287.  move.l d1,(a0)+
  1288.  move.l d1,(a0)+
  1289.  move.l d1,(a0)+
  1290.  move.l d1,(a0)+
  1291.  move.l d1,(a1)+
  1292.  move.l d1,(a1)+
  1293.  move.l d1,(a1)+
  1294.  move.l d1,(a1)+
  1295.  move.l d1,(a2)+
  1296.  move.l d1,(a2)+
  1297.  move.l d1,(a2)+
  1298.  move.l d1,(a2)+
  1299.  move.l d1,(a3)+
  1300.  move.l d1,(a3)+
  1301.  move.l d1,(a3)+
  1302.  move.l d1,(a3)+
  1303.  move.l d1,(a4)+
  1304.  move.l d1,(a4)+
  1305.  move.l d1,(a4)+
  1306.  move.l d1,(a4)+
  1307.  dbra d0,CLRLOP
  1308.  
  1309.  move.l OPTSPRADDR,a0
  1310.  move.w #44*256+64,(a0)
  1311.  move.w #44*256+2,8(a0)
  1312.  add.l #258*16,a0
  1313.  
  1314.  move.w #44*256+96,(a0)
  1315.  move.w #44*256+2,8(a0)
  1316.  add.l #258*16,a0
  1317.  
  1318.  move.w #44*256+128,(a0)
  1319.  move.w #44*256+2,8(a0)
  1320.  add.l #258*16,a0
  1321.  
  1322.  move.w #44*256+160,(a0)
  1323.  move.w #44*256+2,8(a0)
  1324.  add.l #258*16,a0
  1325.  
  1326.  move.w #44*256+192,(a0)
  1327.  move.w #44*256+2,8(a0)
  1328.  
  1329.  rts
  1330.  
  1331. DRAWOPTSCRN:
  1332.  
  1333.  bsr CLROPTSCRN
  1334.  
  1335. JUSTDRAWIT:
  1336.  
  1337.  move.l #font,a0
  1338.  move.l #MENUDATA,a1
  1339.  move.w OptScrn,d0
  1340.  move.l (a1,d0.w*8),a1
  1341.  
  1342.  move.l OPTSPRADDR,a3
  1343.  add.l #16,a3
  1344.  moveq #0,d2
  1345.  
  1346.  move.w #31,d0
  1347. linelop:
  1348.  move.w #39,d1
  1349.  move.l #SCRTOSPR,a4
  1350.  move.l a3,a2
  1351. charlop:
  1352.  move.b (a1)+,d2
  1353.  lea (a0,d2.w*8),a5
  1354.  move.b (a5)+,(a2)
  1355.  move.b (a5)+,16(a2)
  1356.  move.b (a5)+,32(a2)
  1357.  move.b (a5)+,48(a2)
  1358.  move.b (a5)+,64(a2)
  1359.  move.b (a5)+,80(a2)
  1360.  move.b (a5)+,96(a2)
  1361.  move.b (a5),112(a2)
  1362.  add.w (a4)+,a2
  1363.  dbra d1,charlop
  1364.  add.w #16*8,a3
  1365.  dbra d0,linelop
  1366.  
  1367.  rts
  1368.   
  1369. SCRTOSPR:
  1370.  dc.w 1,1,1,1,1,1,1,258*16-7
  1371.  dc.w 1,1,1,1,1,1,1,258*16-7
  1372.  dc.w 1,1,1,1,1,1,1,258*16-7
  1373.  dc.w 1,1,1,1,1,1,1,258*16-7
  1374.  dc.w 1,1,1,1,1,1,1,258*16-7
  1375.  dc.w 1,1,1,1,1,1,1,258*16-7
  1376.   
  1377. OPTNUM: dc.w 0
  1378. OptScrn: dc.w 0
  1379.  
  1380. MENUDATA:
  1381. ;0
  1382.  dc.l ONEPLAYERMENU_TXT
  1383.  dc.l ONEPLAYERMENU_OPTS
  1384. ;1
  1385.  dc.l INSTRUCTIONS_TXT
  1386.  dc.l INSTRUCTIONS_OPTS
  1387. ;2
  1388.  dc.l CREDITMENU_TXT
  1389.  dc.l CREDITMENU_OPTS
  1390. ;3
  1391.  dc.l ASKFORDISK_TXT
  1392.  dc.l ASKFORDISK_OPTS
  1393. ;4
  1394. ; dc.l ONEPLAYERMENU_TXT
  1395. ; dc.l ONEPLAYERMENU_OPTS
  1396.  dc.l MASTERPLAYERMENU_TXT
  1397.  dc.l MASTERPLAYERMENU_OPTS
  1398. ;5
  1399.  dc.l SLAVEPLAYERMENU_TXT
  1400.  dc.l SLAVEPLAYERMENU_OPTS
  1401. ;6
  1402.  dc.l CONTROL_TXT
  1403.  dc.l CONTROL_OPTS
  1404. ;7
  1405.  dc.l PROTMENU_TXT
  1406.  dc.l CONTROL_OPTS
  1407.  
  1408. ASKFORDISK_TXT:
  1409. ;      0123456789012345678901234567890123456789
  1410.  dc.b '                                        ' ;0
  1411.  dc.b '                                        ' ;1
  1412.  dc.b '                                        ' ;2
  1413.  dc.b '                                        ' ;3
  1414.  dc.b '                                        ' ;4
  1415.  dc.b '                                        ' ;5
  1416.  dc.b '                                        ' ;6
  1417.  dc.b '                                        ' ;7
  1418.  dc.b '                                        ' ;8
  1419.  dc.b '                                        ' ;9
  1420.  dc.b '                                        ' ;0
  1421.  dc.b '                                        ' ;1
  1422.  dc.b '                                        ' ;2
  1423.  dc.b '          INSERT LEVEL DISK             ' ;3
  1424.  dc.b '                                        ' ;4
  1425.  dc.b '          PRESS MOUSE BUTTON            ' ;5
  1426.  dc.b '          WHEN DISK ACTIVITY            ' ;6
  1427.  dc.b '               FINISHES                 ' ;7
  1428.  dc.b '                                        ' ;8
  1429.  dc.b '                                        ' ;9
  1430.  dc.b '                                        ' ;0
  1431.  dc.b '                                        ' ;1
  1432.  dc.b '                                        ' ;2
  1433.  dc.b '                                        ' ;3
  1434.  dc.b '                                        ' ;4
  1435.  dc.b '                                        ' ;5
  1436.  dc.b '                                        ' ;6
  1437.  dc.b '                                        ' ;7
  1438.  dc.b '                                        ' ;8
  1439.  dc.b '                                        ' ;9
  1440.  dc.b '                                        ' ;0
  1441.  dc.b '                                        ' ;1
  1442.  
  1443. ASKFORDISK_OPTS:
  1444.  dc.w -1
  1445.  
  1446.  
  1447. ONEPLAYERMENU_TXT:
  1448. ;      0123456789012345678901234567890123456789
  1449.  dc.b '                                        ' ;0
  1450.  dc.b '                                        ' ;1
  1451.  dc.b '                                        ' ;2
  1452.  dc.b '                                        ' ;3
  1453.  dc.b '                                        ' ;4
  1454.  dc.b '                                        ' ;5
  1455.  dc.b '                                        ' ;6
  1456.  dc.b '                                        ' ;7
  1457.  dc.b '                                        ' ;8
  1458.  dc.b '                                        ' ;9
  1459.  dc.b '                                        ' ;0
  1460. CURRENTLEVELLINE:
  1461.  dc.b '           LEVEL 1 : THE GATE           ' ;1 
  1462.  dc.b '                                        ' ;2
  1463.  dc.b '                1 PLAYER                ' ;3
  1464.  dc.b '                                        ' ;4
  1465.  dc.b '               PLAY  GAME               ' ;5
  1466.  dc.b '                                        ' ;6
  1467.  dc.b '            CONTROL  OPTIONS            ' ;7
  1468.  dc.b '                                        ' ;8
  1469.  dc.b '              GAME CREDITS              ' ;9
  1470.  dc.b '                                        ' ;0
  1471.  dc.b '                PASSWORD                ' ;1
  1472.  dc.b '                                        ' ;2
  1473. PASSWORDLINE:
  1474.  dc.b '                                        ' ;3
  1475.  dc.b '                                        ' ;4
  1476.  dc.b '                                        ' ;5
  1477.  dc.b '                                        ' ;6
  1478.  dc.b '                                        ' ;7
  1479.  dc.b '                                        ' ;8
  1480.  dc.b '                                        ' ;9
  1481.  dc.b '                                        ' ;0
  1482.  dc.b '                                        ' ;1
  1483.  
  1484. ONEPLAYERMENU_OPTS:
  1485.  dc.w 16,13,8,1
  1486.  dc.w 15,15,10,1
  1487.  dc.w 12,17,16,1
  1488.  dc.w 14,19,12,1
  1489.  dc.w 12,23,16,1
  1490.  dc.w -1
  1491.  
  1492.  
  1493. MASTERPLAYERMENU_TXT:
  1494. ;      0123456789012345678901234567890123456789
  1495.  dc.b '                                        ' ;0
  1496.  dc.b '                                        ' ;1
  1497.  dc.b '                                        ' ;2
  1498.  dc.b '                                        ' ;3
  1499.  dc.b '                                        ' ;4
  1500.  dc.b '                                        ' ;5
  1501.  dc.b '                                        ' ;6
  1502.  dc.b '                                        ' ;7
  1503.  dc.b '                                        ' ;8
  1504.  dc.b '                                        ' ;9
  1505.  dc.b '                                        ' ;0
  1506.  dc.b '                                        ' ;1
  1507.  dc.b '            2 PLAYER  MASTER            ' ;2
  1508.  dc.b '                                        ' ;3
  1509. CURRENTLEVELLINEM:
  1510.  dc.b '           LEVEL 1 : THE GATE           ' ;4 
  1511.  dc.b '                                        ' ;5
  1512.  dc.b '               PLAY  GAME               ' ;6
  1513.  dc.b '                                        ' ;7
  1514.  dc.b '            CONTROL  OPTIONS            ' ;8
  1515.  dc.b '                                        ' ;9
  1516.  dc.b '                                        ' ;0
  1517.  dc.b '                                        ' ;1
  1518.  dc.b '                                        ' ;2
  1519.  dc.b '                                        ' ;3
  1520.  dc.b '                                        ' ;4
  1521.  dc.b '                                        ' ;5
  1522.  dc.b '                                        ' ;6
  1523.  dc.b '                                        ' ;7
  1524.  dc.b '                                        ' ;8
  1525.  dc.b '                                        ' ;9
  1526.  dc.b '                                        ' ;0
  1527.  dc.b '                                        ' ;1
  1528.  
  1529. MASTERPLAYERMENU_OPTS:
  1530.  dc.w 12,12,16,1
  1531.  dc.w 7,14,26,1
  1532.  dc.w 15,16,10,1
  1533.  dc.w 12,18,16,1
  1534.  dc.w -1
  1535.  
  1536. SLAVEPLAYERMENU_TXT:
  1537. ;      0123456789012345678901234567890123456789
  1538.  dc.b '                                        ' ;0
  1539.  dc.b '                                        ' ;1
  1540.  dc.b '                                        ' ;2
  1541.  dc.b '                                        ' ;3
  1542.  dc.b '                                        ' ;4
  1543.  dc.b '                                        ' ;5
  1544.  dc.b '                                        ' ;6
  1545.  dc.b '                                        ' ;7
  1546.  dc.b '                                        ' ;8
  1547.  dc.b '                                        ' ;9
  1548.  dc.b '                                        ' ;9
  1549.  dc.b '                                        ' ;1
  1550.  dc.b '             2 PLAYER SLAVE             ' ;4
  1551.  dc.b '                                        ' ;3
  1552.  dc.b '               PLAY  GAME               ' ;2
  1553.  dc.b '                                        ' ;5
  1554.  dc.b '            CONTROL  OPTIONS            ' ;0
  1555.  dc.b '                                        ' ;1
  1556.  dc.b '                                        ' ;3
  1557.  dc.b '                                        ' ;7
  1558.  dc.b '                                        ' ;7
  1559.  dc.b '                                        ' ;3
  1560.  dc.b '                                        ' ;3
  1561.  dc.b '                                        ' ;3
  1562.  dc.b '                                        ' ;4
  1563.  dc.b '                                        ' ;5
  1564.  dc.b '                                        ' ;6
  1565.  dc.b '                                        ' ;7
  1566.  dc.b '                                        ' ;9
  1567.  dc.b '                                        ' ;9
  1568.  dc.b '                                        ' ;9
  1569.  dc.b '                                        ' ;9
  1570.  
  1571.  
  1572. PROTMENU_TXT:
  1573. ;      0123456789012345678901234567890123456789
  1574.  dc.b '                                        ' ;0
  1575.  dc.b '                                        ' ;1
  1576.  dc.b '                                        ' ;2
  1577.  dc.b '                                        ' ;3
  1578.  dc.b '                                        ' ;4
  1579.  dc.b '                                        ' ;5
  1580.  dc.b '                                        ' ;6
  1581.  dc.b '                                        ' ;7
  1582.  dc.b '                                        ' ;8
  1583.  dc.b '                                        ' ;9
  1584.  dc.b '                                        ' ;0
  1585.  dc.b '                                        ' ;1
  1586.  dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
  1587.  dc.b '                                        ' ;3
  1588. PROTLINE:
  1589.  dc.b '        TABLE 00 ROW 00 COLUMN 00       ' ;4
  1590.  dc.b '                                        ' ;5
  1591.  dc.b '                                        ' ;6
  1592.  dc.b '                                        ' ;7
  1593.  dc.b '                                        ' ;8
  1594.  dc.b '                                        ' ;9
  1595.  dc.b '                                        ' ;0
  1596.  dc.b '                                        ' ;1
  1597.  dc.b '                                        ' ;2
  1598.  dc.b '                                        ' ;3
  1599.  dc.b '                                        ' ;4
  1600.  dc.b '                                        ' ;5
  1601.  dc.b '                                        ' ;6
  1602.  dc.b '                                        ' ;7
  1603.  dc.b '                                        ' ;9
  1604.  dc.b '                                        ' ;0
  1605.  dc.b '                                        ' ;1
  1606.  
  1607.  
  1608.  
  1609. SLAVEPLAYERMENU_OPTS:
  1610.  dc.w 12,12,16,1
  1611.  dc.w 15,14,10,1
  1612.  dc.w 12,16,16,1
  1613.  dc.w -1
  1614.  
  1615.  
  1616. PLAYER_OPTS:
  1617. ;      0123456789012345678901234567890123456789
  1618.  dc.b '                 1 PLAYER               '
  1619.  dc.b '             2  PLAYER MASTER           '
  1620.  dc.b '              2 PLAYER SLAVE            '
  1621.  
  1622. LEVEL_OPTS:
  1623. ;      0123456789012345678901234567890123456789
  1624.  dc.b '      LEVEL  1 :          THE GATE      '
  1625.  dc.b '      LEVEL  2 :       STORAGE BAY      '
  1626.  dc.b '      LEVEL  3 :     SEWER NETWORK      '
  1627.  dc.b '      LEVEL  4 :       COURTYARD A      '
  1628.  dc.b '      LEVEL  5 :      SYSTEM PURGE      '
  1629.  dc.b '      LEVEL  6 :         THE MINES      '
  1630.  dc.b '      LEVEL  7 :       THE FURNACE      '
  1631.  dc.b '      LEVEL  8 :  TEST ARENA GAMMA      '
  1632.  dc.b '      LEVEL  9 :      SURFACE ZONE      '
  1633.  dc.b '      LEVEL 10 :     TRAINING AREA      '
  1634.  dc.b '      LEVEL 11 :       ADMIN BLOCK      '
  1635.  dc.b '      LEVEL 12 :           THE PIT      '
  1636.  dc.b '      LEVEL 13 :            STRATA      '
  1637.  dc.b '      LEVEL 14 :      REACTOR CORE      '
  1638.  dc.b '      LEVEL 15 : COOLING TOWER ONE      '
  1639.  dc.b '      LEVEL 16 :    COMMAND CENTRE      '
  1640.  
  1641. CONTROL_TXT:
  1642. ;      0123456789012345678901234567890123456789
  1643.  dc.b '                                        ' ;0
  1644.  dc.b '                                        ' ;1
  1645.  dc.b '                                        ' ;2
  1646.  dc.b '                                        ' ;3
  1647.  dc.b '            DEFINE  CONTROLS            ' ;4
  1648.  dc.b '                                        ' ;5
  1649. KEY_LINES:
  1650.  dc.b '     TURN LEFT                  LCK     ' ;6
  1651.  dc.b '     TURN RIGHT                 RCK     ' ;7
  1652.  dc.b '     FORWARDS                   UCK     ' ;8
  1653.  dc.b '     BACKWARDS                  DCK     ' ;9
  1654.  dc.b '     FIRE                       RAL     ' ;0
  1655.  dc.b '     OPERATE DOOR/LIFT/SWITCH   SPC     ' ;1
  1656.  dc.b '     RUN                        RSH     ' ;2
  1657.  dc.b '     FORCE SIDESTEP             RAM     ' ;3
  1658.  dc.b '     SIDESTEP LEFT               .      ' ;4
  1659.  dc.b '     SIDESTEP RIGHT              /      ' ;5
  1660.  dc.b '     DUCK                        D      ' ;6
  1661.  dc.b '     LOOK BEHIND                 L      ' ;7
  1662.  dc.b '                                        ' ;8
  1663.  dc.b '             OTHER CONTROLS             ' ;9
  1664.  dc.b '                                        ' ;0
  1665.  dc.b ' PULSE RIFLE      1  PAUSE            P ' ;1
  1666.  dc.b ' SHOTGUN          2  QUIT           ESC ' ;2
  1667.  dc.b ' PLASMA GUN       3  MOUSE CONTROL    M ' ;3
  1668.  dc.b ' GRENADE LAUNCHER 4  JOYSTICK CONTROL J ' ;4
  1669.  dc.b ' ROCKET LAUNCHER  5  KEYBOARD CONTROL K ' ;5
  1670.  dc.b '                                        ' ;6
  1671.  dc.b '               MAIN  MENU               ' ;7
  1672.  dc.b '                                        ' ;8
  1673.  dc.b '                                        ' ;9
  1674.  dc.b '                                        ' ;0
  1675.  dc.b '                                        ' ;1
  1676.  
  1677. CONTROL_OPTS:
  1678.  dc.w 5,6,30,1
  1679.  dc.w 5,7,30,1
  1680.  dc.w 5,8,30,1
  1681.  dc.w 5,9,30,1
  1682.  dc.w 5,10,30,1
  1683.  dc.w 5,11,30,1
  1684.  dc.w 5,12,30,1
  1685.  dc.w 5,13,30,1
  1686.  dc.w 5,14,30,1
  1687.  dc.w 5,15,30,1
  1688.  dc.w 5,16,30,1
  1689.  dc.w 5,17,30,1
  1690.  dc.w 15,27,10,1
  1691.  dc.w -1
  1692.  
  1693. PLOPT: dc.w 0
  1694.  
  1695. INSTRUCTIONS_TXT:
  1696. ;      0123456789012345678901234567890123456789
  1697.  dc.b 'Main controls:                          ' ;1
  1698.  dc.b '                                        ' ;2
  1699.  dc.b 'Curs Keys = Forward / Backward          ' ;3
  1700.  dc.b '            Turn left / right           ' ;4
  1701.  dc.b '          Right Alt = Fire              ' ;5
  1702.  dc.b '        Right Shift = Run               ' ;6
  1703.  dc.b '                  > = Slide Left        ' ;7
  1704.  dc.b '                  ? = Slide Right       ' ;8
  1705.  dc.b '              SPACE = Operate Door/Lift ' ;9
  1706.  dc.b '                  D = Duck              ' ;0
  1707.  dc.b '                  J = Joystick Control  ' ;1
  1708.  dc.b '                  K = Keyboard Control  ' ;2
  1709.  dc.b '                                        ' ;3
  1710.  dc.b '              1,2,3 = Select weapon     ' ;4
  1711.  dc.b '              ENTER = Toggle screen size' ;5
  1712.  dc.b '                ESC = Quit              ' ;6
  1713.  dc.b '                                        ' ;7
  1714.  dc.b '                                        ' ;8
  1715.  dc.b 'The one player game has no objective and' ;9
  1716.  dc.b 'the only way to finish is to die or quit' ;0
  1717.  dc.b '                                        ' ;1
  1718.  dc.b 'The two-player game is supposed to be a ' ;2
  1719.  dc.b 'fight to the death but will probably be ' ;3
  1720.  dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
  1721.  dc.b 'then-blow-ourselves-up type game.       ' ;5
  1722.  dc.b '                                        ' ;6
  1723.  dc.b 'LOOK OUT FOR TELEPORTERS: They usually  ' ;7
  1724.  dc.b 'have glowing red walls and overhead     ' ;8
  1725.  dc.b 'lights. Useful for getting behind your  ' ;9
  1726.  dc.b ' opponent!                              ' ;0
  1727.  dc.b '  Just a taster of what is to come....  ' ;1
  1728.  dc.b '                                        ' ;0
  1729.  
  1730. INSTRUCTIONS_OPTS:
  1731.  dc.w 0,0,0,1
  1732.  dc.w -1
  1733.  
  1734. CREDITMENU_TXT:
  1735.  
  1736. ;      0123456789012345678901234567890123456789
  1737.  dc.b '                                        ' ;7
  1738.  dc.b '                                        ' ;7
  1739.  dc.b '             Main Game Code:            ' ;0
  1740.  dc.b '                   by                   ' ;1
  1741.  dc.b '            Andrew Clitheroe            ' ;2
  1742.  dc.b '                                        ' ;3
  1743.  dc.b '    Serial Link and 3D Object Editor:   ' ;4
  1744.  dc.b '                   by                   ' ;5
  1745.  dc.b '            Charles Blessing            ' ;6
  1746.  dc.b '                                        ' ;7
  1747.  dc.b '                Graphics:               ' ;8
  1748.  dc.b '                   by                   ' ;9
  1749.  dc.b '              Mike  Oakley              ' ;0
  1750.  dc.b '                                        ' ;1
  1751.  dc.b '             Title  Picture             ' ;2
  1752.  dc.b '                   by                   ' ;3
  1753.  dc.b '               Mike Green               ' ;4
  1754.  dc.b '                                        ' ;5
  1755.  dc.b ' Inspiration, incentive, moral support, ' ;6
  1756.  dc.b '     level design and plenty of tea     ' ;7
  1757.  dc.b '         generously supplied by         ' ;8
  1758.  dc.b '                                        ' ;9
  1759.  dc.b '              Jackie  Lang              ' ;0
  1760.  dc.b '                                        ' ;1
  1761.  dc.b '    Music for the last demo composed    ' ;2
  1762.  dc.b '       by the inexpressibly evil:       ' ;3
  1763.  dc.b '                                        ' ;8
  1764.  dc.b '            *BAD* BEN CHANTER           ' ;9
  1765.  dc.b '                                        ' ;0
  1766.  dc.b '    Sadly no room for music this time   ' ;1
  1767.  dc.b '                                        ' ;7
  1768.  dc.b '                                        ' ;7
  1769.  
  1770. CREDITMENU_OPTS:
  1771.  dc.w 0,0,1,1
  1772.  dc.w -1
  1773.  
  1774.  
  1775. ;      0123456789012345678901234567890123456789
  1776.  dc.b '                                        ' ;0
  1777.  dc.b '                                        ' ;1
  1778.  dc.b '                                        ' ;2
  1779.  dc.b '                                        ' ;3
  1780.  dc.b '                                        ' ;4
  1781.  dc.b '                                        ' ;5
  1782.  dc.b '                                        ' ;6
  1783.  dc.b '                                        ' ;7
  1784.  dc.b '                                        ' ;8
  1785.  dc.b '                                        ' ;9
  1786.  dc.b '                                        ' ;0
  1787.  dc.b '                                        ' ;1
  1788.  dc.b '                                        ' ;2
  1789.  dc.b '                                        ' ;3
  1790.  dc.b '                                        ' ;4
  1791.  dc.b '                                        ' ;5
  1792.  dc.b '                                        ' ;6
  1793.  dc.b '                                        ' ;7
  1794.  dc.b '                                        ' ;8
  1795.  dc.b '                                        ' ;9
  1796.  dc.b '                                        ' ;0
  1797.  dc.b '                                        ' ;1
  1798.  dc.b '                                        ' ;2
  1799.  dc.b '                                        ' ;3
  1800.  dc.b '                                        ' ;4
  1801.  dc.b '                                        ' ;5
  1802.  dc.b '                                        ' ;6
  1803.  dc.b '                                        ' ;7
  1804.  dc.b '                                        ' ;8
  1805.  dc.b '                                        ' ;9
  1806.  dc.b '                                        ' ;0
  1807.  dc.b '                                        ' ;1
  1808.  
  1809.  
  1810. ********************************************************
  1811.  
  1812. PUTIN32:
  1813.  move.w #31,d2
  1814. p32loop:
  1815.  moveq #0,d5
  1816.  move.l (a0)+,d3
  1817.  move.w d3,d4
  1818.  swap d3
  1819.  move.b d4,d5
  1820.  lsr.w #8,d4
  1821.  
  1822.  muls d0,d3
  1823.  muls d0,d4
  1824.  muls d0,d5
  1825.  lsr.l #8,d3
  1826.  lsr.l #8,d4
  1827.  lsr.l #8,d5
  1828.  move.w d3,d6
  1829.  swap d3
  1830.  move.w d6,d3
  1831.  move.w d4,d6
  1832.  swap d4
  1833.  move.w d6,d4
  1834.  move.w d5,d6
  1835.  swap d5
  1836.  move.w d6,d5
  1837.  and.w #%11110000,d3
  1838.  and.w #%11110000,d4
  1839.  and.w #%11110000,d5
  1840.  lsl.w #4,d3
  1841.  add.w d4,d3
  1842.  lsr.w #4,d5
  1843.  add.w d5,d3
  1844.  move.w d3,2(a1)
  1845.  swap d3
  1846.  swap d4
  1847.  swap d5
  1848.  and.w #%1111,d3
  1849.  and.w #%1111,d4
  1850.  and.w #%1111,d5
  1851.  lsl.w #8,d3
  1852.  lsl.w #4,d4
  1853.  add.w d4,d3
  1854.  add.w d5,d3
  1855.  move.w d3,2+(132*4)(a1)
  1856.  addq #4,a1
  1857.  dbra d2,p32loop
  1858.  
  1859.  
  1860.  rts
  1861.  
  1862. **************************************
  1863.  
  1864. FADEAMOUNT: dc.w 0
  1865. FADEVAL: dc.w 0
  1866.  
  1867. FADEUPTITLE:
  1868.  
  1869.  move.w FADEVAL,d0
  1870.  move.w FADEAMOUNT,d1
  1871. fadeuploop:
  1872.  
  1873.  move.l #TITLEPAL,a0
  1874.  move.l #TITLEPALCOP,a1
  1875.  
  1876. wvb:
  1877.  btst #5,$dff000+intreqrl
  1878.  beq.s wvb
  1879.  move.w #$20,$dff000+intreq 
  1880.  
  1881.  bsr PUTIN32
  1882.  add.w #4,a1
  1883.  bsr PUTIN32
  1884.  add.w #4,a1
  1885.  bsr PUTIN32
  1886.  add.w #4,a1
  1887.  bsr PUTIN32
  1888.  
  1889.  addq.w #4,d0
  1890.  dbra d1,fadeuploop
  1891.  
  1892.  subq #4,d0
  1893.  move.w d0,FADEVAL
  1894.  
  1895.  rts
  1896.  
  1897. CLEARTITLEPAL:
  1898.  PRSDP
  1899.  move.l #TITLEPALCOP,a0
  1900.  move.w #7,d1
  1901. clrpal:
  1902.  move.w #31,d0
  1903. clr32
  1904.  move.w #0,2(a0)
  1905.  addq #4,a0
  1906.  dbra d0,clr32
  1907.  addq #4,a0
  1908.  dbra d1,clrpal
  1909.  PRSDQ
  1910.  rts
  1911.  
  1912. FADEDOWNTITLE:
  1913.  
  1914.  move.w FADEVAL,d0
  1915.  move.w FADEAMOUNT,d1
  1916. fadedownloop:
  1917.  
  1918.  move.l #TITLEPAL,a0
  1919.  move.l #TITLEPALCOP,a1
  1920.  
  1921. .wvb:
  1922.  btst #5,$dff000+intreqrl
  1923.  beq.s .wvb
  1924.  move.w #$20,$dff000+intreq 
  1925.  
  1926.  bsr PUTIN32
  1927.  add.w #4,a1
  1928.  bsr PUTIN32
  1929.  add.w #4,a1
  1930.  bsr PUTIN32
  1931.  add.w #4,a1
  1932.  bsr PUTIN32
  1933.  
  1934.  subq.w #4,d0
  1935.  dbra d1,fadedownloop
  1936.  
  1937.  addq #4,d0
  1938.  move.w d0,FADEVAL
  1939.  
  1940.  rts
  1941.  
  1942. GETTITLEMEM:
  1943.  move.l #2,d1
  1944.  move.l #10240*7,d0
  1945.  move.l 4.w,a6
  1946.  jsr -198(a6)
  1947.  move.l d0,TITLESCRNADDR
  1948.  
  1949.  move.l #$dff000-$2cdfe4,a4
  1950.  
  1951.  move.l #2,d1
  1952.  move.l #258*16*5,d0
  1953.  move.l 4.w,a6
  1954.  jsr -198(a6)
  1955.  move.l d0,OPTSPRADDR
  1956.  
  1957.  rts
  1958.  
  1959. PROTSETUP:
  1960.  incbin "ab3:includes/protsetupenc"
  1961.  
  1962. ; Need to: Decode protection calling
  1963. ; routine
  1964. ; use null values to call it and erase
  1965. ; it from memory
  1966. ; erase this routine and return.
  1967.  
  1968. ; include "ab3:source/protsetup"
  1969.  
  1970.  
  1971. RELEASETITLEMEM:
  1972.  move.l TITLESCRNADDR,d1
  1973.  move.l d1,a1
  1974.  move.l #10240*7,d0
  1975.  move.l 4.w,a6
  1976.  jsr -210(a6)
  1977.  
  1978.  move.l OPTSPRADDR,d1
  1979.  move.l d1,a1
  1980.  move.l #258*80,d0
  1981.  move.l 4.w,a6
  1982.  jsr -210(a6)
  1983.  rts
  1984.  
  1985.  
  1986. PROTCALLENC:
  1987.  incbin "ab3:source/protcallenc.bin
  1988.  
  1989. ; one pass, all instructions executed.
  1990. ; must call protection routine,store
  1991. ; value somewhere, call ask routine,
  1992. ; compare returned value, if correct
  1993. ; set up all values, then return.
  1994.  
  1995. ; include "ab3:source/protcallenc"
  1996.  
  1997. ENDPROT:
  1998.  
  1999. LOADTITLESCRN:
  2000.  
  2001.  move.l #TITLESCRNNAME,d1
  2002.  move.l #1005,d2
  2003.  move.l doslib,a6
  2004.  jsr -30(a6)
  2005.  move.l d0,handle
  2006.  move.l d0,d1
  2007.  move.l doslib,a6
  2008.  move.l TITLESCRNADDR,d2
  2009.  move.l #10240*7,d3
  2010.  jsr -42(a6)
  2011.  move.l doslib,a6
  2012.  move.l handle,d1
  2013.  jsr -36(a6)
  2014.  rts
  2015.  
  2016. RVAL2: dc.w 0
  2017.  
  2018. SETUPTITLESCRN:
  2019.  
  2020.  PRSDR
  2021.  move.l #OPTCOP,a0
  2022.  move.l #rain,a1
  2023.  move.w #255,d0
  2024. putinrain:
  2025.  move.w (a1)+,d1
  2026.  move.w d1,6(a0)
  2027.  move.w d1,6+4(a0)
  2028.  move.w d1,6+8(a0)
  2029.  move.w d1,6+12(a0)
  2030.  add.w #4*14,a0
  2031.  
  2032.  dbra d0,putinrain
  2033.  
  2034. ; Put addr into copper.
  2035.  move.l OPTSPRADDR,d0
  2036.  move.w d0,tsp0l
  2037.  swap d0
  2038.  move.w d0,tsp0h
  2039.  swap d0
  2040.  add.l #258*16,d0
  2041.  move.w d0,tsp1l
  2042.  swap d0
  2043.  move.w d0,tsp1h
  2044.  swap d0
  2045.  add.l #258*16,d0
  2046.  move.w d0,tsp2l
  2047.  swap d0
  2048.  move.w d0,tsp2h
  2049.  swap d0
  2050.  add.l #258*16,d0
  2051.  move.w d0,tsp3l
  2052.  swap d0
  2053.  move.w d0,tsp3h
  2054.  swap d0
  2055.  add.l #258*16,d0
  2056.  move.w d0,tsp4l
  2057.  swap d0
  2058.  move.w d0,tsp4h
  2059.  
  2060.  move.l #nullspr,d0
  2061.  move.w d0,tsp5l
  2062.  move.w d0,tsp6l
  2063.  move.w d0,tsp7l
  2064.  swap d0
  2065.  move.w d0,tsp5h
  2066.  move.w d0,tsp6h
  2067.  move.w d0,tsp7h 
  2068.  
  2069.  move.l TITLESCRNADDR,d0
  2070.  move.w d0,ts1l
  2071.  swap d0
  2072.  move.w d0,ts1h
  2073.  swap d0
  2074.  add.l #10240,d0
  2075.  move.w d0,ts2l
  2076.  swap d0
  2077.  move.w d0,ts2h
  2078.  swap d0
  2079.  add.l #10240,d0
  2080.  move.w d0,ts3l
  2081.  swap d0
  2082.  move.w d0,ts3h
  2083.  swap d0
  2084.  add.l #10240,d0
  2085.  move.w d0,ts4l
  2086.  swap d0
  2087.  move.w d0,ts4h
  2088.  swap d0
  2089.  add.l #10240,d0
  2090.  move.w d0,ts5l
  2091.  swap d0
  2092.  move.w d0,ts5h
  2093.  swap d0
  2094.  add.l #10240,d0
  2095.  move.w d0,ts6l
  2096.  swap d0
  2097.  move.w d0,ts6h
  2098.  swap d0
  2099.  add.l #10240,d0
  2100.  move.w d0,ts7l
  2101.  swap d0
  2102.  move.w d0,ts7h
  2103.  rts 
  2104.  
  2105. RVAL1: dc.w 0
  2106.  
  2107. DummyAdds:
  2108.  dc.l dummy-78935450
  2109.  dc.l dummy-78935450
  2110.  dc.l dummy-78935450
  2111.  dc.l dummy-78935450
  2112.  dc.l dummy-78935450
  2113.  dc.l dummy-78935450
  2114.  dc.l dummy-78935450
  2115.  dc.l dummy-78935450
  2116.  dc.l dummy-78935450
  2117.  dc.l dummy-78935450
  2118.  
  2119.  
  2120. dummycall
  2121.  dc.w $4e75-123
  2122.  
  2123. protspace: ds.l 200
  2124.  
  2125.  
  2126.  
  2127.  
  2128. font:
  2129.  incbin "OptFont"
  2130.  
  2131. rain: incbin "optcop"
  2132.